#include "Graficador.h"


Graficador::Graficador() {


}

Graficador::~Graficador() {

}

void Graficador::imprimirTablero(Tablero* tablero, string ruta){

	const int escala=15;
	const int profundidadBits=24;


	srand(time(NULL)); //el seed para el generador aleatorio depende del tiempo

	unsigned int alto = tablero->getAltura();
	unsigned int ancho = tablero->getAncho();
	Pieza* piezaADibujar;

	BMP tableroBMP;
	tableroBMP.SetSize(ancho*escala,alto*escala);
	tableroBMP.SetBitDepth( profundidadBits );

	RGBApixel rgbColor;
	rgbColor.Alpha=255;

	Secuencia* piezasARepresentar = tablero->obtenerPiezasInsertadas();
	while(!piezasARepresentar->vacia()){
		piezaADibujar = piezasARepresentar->sacarPieza();

		rgbColor.Red = rand() % 255; // color aleatorio para cada pieza
		rgbColor.Green = rand() % 255;
		rgbColor.Blue = rand() % 255;

		for(unsigned int x=0; x <  piezaADibujar->getCantidadColumnas() ; x++){
			for(unsigned int y=0; y< piezaADibujar->getCantidadFilas() ; y++){
				if (piezaADibujar->getCasillero(x,y).getEstado()) {
					fillRectangulo(&tableroBMP,&rgbColor,(piezaADibujar->obtenerPosicionHorizontal() + x)*escala,(piezaADibujar->obtenerPosicionVertical() + y)*escala,escala,escala);
				}
			}
		}
		delete piezaADibujar;
		rgbColor.Red = rand() % 255;
	}
	delete piezasARepresentar;

	//guardar la imagen bmp
	ruta.append(".bmp");
	const char *direccion = ruta.c_str();

	tableroBMP.WriteToFile( direccion );

}
//Precondicion:un objeto BMP, RGBApixel para saber el color del pixel
//ubicacion (posiX,posiY) dimensiones (alto,ancho)
void Graficador::fillRectangulo(BMP * tableroBMP,RGBApixel * rgbColor,unsigned int posiColumna, unsigned int posifila, unsigned int alto, unsigned int ancho){
	bool isOK = true;
	unsigned int y = posiColumna ;
	unsigned int x = posifila ;

	while(isOK && y<(posiColumna+alto)){
		while(isOK && x<(posifila+ancho)){
			isOK=tableroBMP->SetPixel(y,x,(*rgbColor));
			x++;
		}
		y++;
		x=posifila;
	}


}

